package com.date.demo01;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Calendars {
    public static void main(String[] args) {
        System.out.println("Calendar 类库用法");
        /**
         * Calendar
         * 提供了获取或设置各种日历字段的方法
         * 构造方法 protected Calendar(); 由于是protected 所以无法直接创建
         *  优点：Calendar 便于计算，可以用于获取并设置年、月、日、时、分、秒，
         *       它和Date比，主要多了一个可以做简单的日期和时间运算的功能。
         *
         *  注意：
         *      1、Calendar获取年月日这些信息变成了get(int field)
         *      2、返回的年份不必转换，返回的月份仍要加 1，返回的星期要特别注意，1~7分别表示周日，周一，……，周六。
         *      3、创建 Calendar 对象只有一种方式 Calendar.getInstance()
         *
         *  常用方法：
         *      1、getInstance();创建对象 方法
         *      2、get(int field); 获取对应的年月日 int 类型
         *      3、getTime(); 返回一个 Date 对象，表示日历的时间
         *      4、set(int field); 设置 年月日
         *      5、setTime(时间戳 getTime()); 设置当前日历时间
         *
         *  利用Calendar.getTime()可以将一个Calendar对象转换成Date对象，然后就可以用SimpleDateFormat进行格式化了。
         */

        // 1. 创建 Calendar 对象
        Calendar calendar  = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString()); // 获取当前本地时间 2021-12-22 16:24:08
        // 2.获取时间信息
        // 获取年
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year); // 2021
        // 获取月份 0~11 返回值 需要加 1
        int m = calendar.get(Calendar.MONTH);
        System.out.println(m+1);
        // 日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(day); // 22
        // 小时
        int h = calendar.get(Calendar.HOUR_OF_DAY);
        System.out.println(h); // 16
        // 分
        int minute = calendar.get(Calendar.MINUTE);
        System.out.println(minute); // 35
        // 秒
        int s = calendar.get(Calendar.SECOND);
        System.out.println(s); // 40秒
        // 获取星期几
        int week = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println(week);
        System.out.println("===设置时间==="); // 4 表示周三
        // 设置时间操作
        Calendar c  = Calendar.getInstance();
        // 设置 2019年
        c.set(Calendar.YEAR,2019);
        // 设置 10月：注意 9表示 10月
        c.set(Calendar.MONTH,9);
        // 设置 21号
        c.set(Calendar.DAY_OF_MONTH,21);
        // 设置小时 15
        c.set(Calendar.HOUR_OF_DAY,15);
        // 设置分钟 30
        c.set(Calendar.MINUTE,30);
        // 设置秒 40
        c.set(Calendar.SECOND,40);
        // 简便方法(推荐)
        // c.set(2019, 9 /* 10月 */, 21, 15, 30, 40);
        // 简便方法二
        // Date date = new Date(119, 9, 21);
        // c.setTime(date);
        // 获取时间 2019/10/21 15-30-40
        String date_str = (new SimpleDateFormat("yyyy/MM/dd HH-mm-ss")).format(c.getTime());
        System.out.println(date_str);
        // 扩展方法
        int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);// 月中最大天数
        int min = c.getActualMinimum(Calendar.DAY_OF_MONTH);// 月中最小天数 第一天
        System.out.println(max);
        System.out.println(min);

        // Calendar 用于时间运算
        // 当前时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        Calendar instance = Calendar.getInstance();
        // 加5天时间
        instance.add(Calendar.DAY_OF_MONTH,5);
        System.out.println(simpleDateFormat.format(instance.getTime()));
        // 减去2小时
        instance.add(Calendar.HOUR_OF_DAY,-2);
        System.out.println(simpleDateFormat.format(instance.getTime()));
        // 获取前一天时间
        instance.clear(); // 先清除
        // 设置指定时间 年月日时分秒: 方式一
        //instance.set(2019, 10 /* 11月 */, 20, 8, 15, 0);
        // 设置当前时间
        instance.setTime(Calendar.getInstance().getTime());
        instance.add(Calendar.DAY_OF_MONTH,-1);
        System.out.println(simpleDateFormat.format(instance.getTime()));
        Date dates = new Date(119, 10, 10);

        System.out.println(simpleDateFormat.format(dates));

        System.out.println("=====测试 设置指定时间操作======");

        Calendar i = Calendar.getInstance();
        i.set(2020,12,24,10,10,10);
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat1.format(i.getTime()));
    }
}
